﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace milanov
{
    /// <summary>
    /// Gemaakt door Thom - Eden CheckFoto methode en sessies - Wytse korting
    /// </summary>
    public partial class Cart : System.Web.UI.Page
    {
        private Guid UserId
        {
            get
            {
                return Cartclass.getUserID(User.Identity.Name);
            }
        }
        private string orderid
        {
            get
            {
                return Cartclass.getOrderid(UserId);
            }
        }
        double total = 0;
        double total_kort = 0;
        int aantal = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            //werking van de "ga terug" knop met javascript
            BackButton.Attributes.Add("onClick", "javascript:history.back(); return false;");
            //als de user ingelogt is
            if (User.Identity.IsAuthenticated)
            {
                //Zorgt ervoor dat er winkelwagen van naam in title staat
                h1.Text = "Winkelwagen van " + User.Identity.Name.First().ToString().ToUpper() + String.Join("", User.Identity.Name.Skip(1));
                //als de user ingelogt is en nog geen onvoltooide ordernr heeft maak een ordernr
                if (User.Identity.IsAuthenticated && orderid == "")
                {
                    Convert.ToString(Cartclass.createOrder(UserId));
                    //na het maken van nieuwe ordernr, herlaad pagina om het item toe te voegen
                    Response.Redirect(Request.RawUrl);
                }
                //else, wanneer er dus wel een openordernr is, gebruik de parameter en voeg het product toe aan cart
                else
                {
                    if (Request.QueryString["add"] != null && orderid != "")
                    {
                        //Zet de waarde dat in de URL staat in een string variable
                        int parameter;
                        bool intparameter = int.TryParse(Request.QueryString["add"], out parameter);
                        //wanneer het tryparsen is gelukt, laad de methode met parameter
                        if (intparameter)
                        {
                            //wanneer de user zijn foto niet voorkomt in het mandje of al gekochte fotos dan wordt de onderstaande code uitgevoerd
                            if (CheckFoto(parameter))
                            {
                                //laad de bijhorende methode en geef deze string mee
                                Cartclass.AddToCart(parameter, orderid);
                            }
                            else
                            {
                                Dubbel.Text = "Deze foto kan niet toegevoegd worden aan uw winkelwagen omdat u dit product al eerder hebt gekocht of omdat het product zich al in het winkelwagen bevindt.";
                            }
                        }
                        else
                        {
                            //geen parameter of geen geldige integer parameter, doe niets
                        }
                    }
                    //als er geen add parameter is, kijk of er een rm (remove) parameter is.
                    else if (Request.QueryString["rm"] != null && orderid != "")
                    {
                        //Zet de waarde dat in de URL staat in een string variable
                        int parameter;
                        bool intparameter = int.TryParse(Request.QueryString["rm"], out parameter);
                        //wanneer het tryparsen is gelukt, laad de methode met parameter
                        if (intparameter)
                        {
                            //laad de bijhorende methode en geef deze string mee
                            Cartclass.RemoveFromCart(parameter, orderid);
                        }
                        else
                        {
                            //geen parameter of geen geldige integer parameter, doe niets
                        }
                    }
                    //vull het grid met de items die in cart stana, als deze methode false terug geeft, geef aan dat de cart leeg is.
                    if (!fillCartGrid(orderid))
                    {
                        CartContent.Text += "   Uw winkelmandje is leeg." + "<br>" + "<br>";
                    }
                }
            }
            //user is niet ingelogt, redirect naar inlog pagina
            else
            {
                //voegt een login session toe met de photoID die orgineel aan het cartje zou worden toegevoegd
                Session["login"] = Request.QueryString["add"];
                Response.Redirect("~/Account/Login.aspx?loggedin=0");
            }
        }
        public bool fillCartGrid(string orderid)
        {
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["fotosDB"].ConnectionString))
            {

                string query = "SELECT Fotos.* FROM [Fotos] INNER JOIN Cart ON Fotos.FileID=PhotoId where orderid = @orderid;";
                using (SqlDataAdapter da = new SqlDataAdapter(query, con))
                {
                    DataTable dt = new DataTable();
                    da.SelectCommand.Parameters.AddWithValue("@orderid", orderid);
                    da.Fill(dt);
                    if (dt.Rows.Count == 0)
                    {
                        return false;
                    }
                    else
                    CartGrid.DataSource = dt;
                    CartGrid.DataBind();
                    return true;
                }
            }
        }
        /// <summary>
        /// methode die het totaalbedrag berekend
        /// </summary>
        protected void Totalprice_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Label lblPrice = (Label)e.Row.FindControl("lblPrice");
                double price = Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "Price"));
                //lblPrice.Text = price.ToString();
                aantal ++;
                total = total + price;
                //berekent hoeveel korting er wordt gegeven (2% per foto, tot maximaal 10%)
                total_kort = total * (1 - 0.01 * Math.Min(2 * (aantal - 1), 10));
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                Label Total = (Label)e.Row.FindControl("Totalp");
                //maakt totaalbedrag een mooi bedrag met 2dec met de korting er af
                Total.Text = "€" + string.Format(((Math.Round(total_kort) == total_kort) ? "{0:0.00}" : "{0:0.00}"), total_kort);
                Label Korting = (Label)e.Row.FindControl("Korting");
                int procent = (aantal - 1) * 2;
                if (procent > 10)
                {
                    procent = 10;
                }
                Korting.Text += procent+"%";
            }
        }
        protected void CheckoutButton_Click(object sender, EventArgs e)
        {

        }

        protected void CheckoutButton_Click1(object sender, EventArgs e)
        {
            if (total == 0) { }
            else {Session["Checkout"] = total_kort;
            Server.Transfer("Payment.aspx");}
        }
        // dit is een methode die kijkt als de opgegeven photoid al voorkomt in de user zijn orders en dan true of false trg geeft
        protected bool CheckFoto(int id)
        {
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["fotosDB"].ConnectionString))
            {
                object go;
                string query = "select o.Completed from Orders o, Cart c where o.OrderId = c.OrderId AND c.PhotoId = @photoid AND o.UserId = @userid;";
                using (SqlDataAdapter da = new SqlDataAdapter(query, con))
                {
                    SqlCommand showresult = new SqlCommand(query, con);
                    showresult.Parameters.AddWithValue("photoid", id);
                    showresult.Parameters.AddWithValue("userid", UserId);

                    con.Open();
                    go = showresult.ExecuteScalar();
                    con.Close();
                    if (go == null)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                
            }
        }
    }
}